package com.liujun.io.nio.mysql.bean.protocol.result;

import java.nio.ByteBuffer;
import java.util.Map;

import com.liujun.io.nio.mysql.bean.protocol.PackageHeader;
import com.liujun.io.nio.mysql.protocol.comm.MySQLMessage;
import com.liujun.io.nio.mysql.protocol.inf.DataParseInf;

/**
 *  * MySQL 4.1 及之后的版本
结构  说明
[Result Set Header] 列数量
[Field] 列信息（多个）
[EOF]   列结束
[Row Data]  行数据（多个）
[EOF]   数据结束
* 源文件名：EofPackageBean.java
* 文件版本：1.0.0
* 创建作者：liujun
* 创建日期：2016年12月14日
* 修改作者：liujun
* 修改日期：2016年12月14日
* 文件描述：TODO
* 版权所有：Copyright 2016 zjhz, Inc. All Rights Reserved.
*/
public class EofPackageBean extends PackageHeader implements DataParseInf<EofPackageBean> {

    /**
     * 报文的结果
    * @字段说明 DEFVALUE
    */
    public static final byte DEFVALUE = (byte) 0xfe;

    /**
     * EOF值（0xFE）
    * @字段说明 eofValue
    */
    private byte eofValue;

    /**
     * 告警计数：服务器告警数量，在所有数据都发送给客户端后该值才有效。
    * @字段说明 warnCount
    */
    private int warnCount;

    /**
     * 状态标志位：包含类似SERVER_MORE_RESULTS_EXISTS这样的标志位。
    * @字段说明 statusFlag
    */
    private int statusFlag;

    @Override
    public EofPackageBean readPackage(ByteBuffer buffer) {

        MySQLMessage mm = new MySQLMessage(buffer);
        // 包大小
        this.length = mm.readUB3();
        // 序号
        this.seq = mm.read();
        // EOF值
        this.eofValue = mm.read();
        // 告警计数
        this.warnCount = mm.readUB2();
        // 状态标识
        this.statusFlag = mm.readUB2();

        return this;
    }

    @Override
    public ByteBuffer getWriteToPackage(Map<String, Object> param) {
        return null;
    }

    @Override
    public int getpackageSize() {
        // TODO Auto-generated method stub
        return 0;
    }

    public byte getEofValue() {
        return eofValue;
    }

    public void setEofValue(byte eofValue) {
        this.eofValue = eofValue;
    }

    public int getWarnCount() {
        return warnCount;
    }

    public void setWarnCount(int warnCount) {
        this.warnCount = warnCount;
    }

    public int getStatusFlag() {
        return statusFlag;
    }

    public void setStatusFlag(int statusFlag) {
        this.statusFlag = statusFlag;
    }

}
